#include <stdio.h>

void print_bin_1(int x){
	char buff[32] = {0};
	// 辗转相除
	int i = 0;
	do{
		buff[i] = x % 2;
		x /= 2;
		i++;
	}while(x);

	// 翻转
	char *p = buff;
	char *q = p+i-1;
	char temp;
	while(p < q){
		temp = *p;
		*p = *q;
		*q = temp;
		p++;
		q--;
	}
	// 输出
	printf("0b");
	for(int j = 0; j < i; j++){
		printf("%d", buff[j]);
	}
	printf("\n");
}

void print_bin_2(int x){
	if(0 == x){
		printf("0b0\n");
		return;
	}
	char buff[32] = {0};
	int i = 0;
	for(i = 0; i < 32; i++){
		if(x & 1<<i){
			buff[i] = 1;
		}else{
			buff[i] = 0;
		}
	}
	// 先找从右向左第一个 1 的下标
	for(i = 31; i >= 0; i--){
		if(buff[i]){
			break;
		}
	}
	// 输出
	printf("0b");
	for(int j = i; j >=0; j--){
		printf("%d", buff[j]);
	}
	printf("\n");
}

int main(int argc, const char *argv[])
{
	print_bin_1(8);   // 1000
	print_bin_1(14);  // 1110
	print_bin_1(129); // 10000001
	print_bin_1(0);   // 0

	printf("-----------------------------------------\n");

	print_bin_2(8);   // 1000
	print_bin_2(14);  // 1110
	print_bin_2(129); // 10000001
	print_bin_2(0);   // 0
	
	return 0;
}
